#ifndef __ISERVICE_MODULE_INFO_IMPL_H__
#define __ISERVICE_MODULE_INFO_IMPL_H__

#include "../common/include/registry_ifaces.h"
#include "../../include/co_class_base.h"
#include "../../include/ref_obj_ptr.h"
#include "../../include/ienum_impl.h"

namespace Boss
{

  class IServiceModuleInfoImpl
    : public CoClassBase
        <
          TL::TypeListAdapter
            <
              IServiceModuleInfo
            >
        >
  {
  public:
    BOSS_DECLARE_CLSID(ed6e2008-59c8-4c2c-96f7-20d153148cc3)

    // IServiceModuleInfo
    virtual TResult BOSS_CALL_TYPE GetModuleId(IVariant **moduleId) const;
    virtual TResult BOSS_CALL_TYPE GetModuleCoClasses(IEnum **coClassIds) const;
    virtual TResult BOSS_CALL_TYPE GetModulePath(IVariant **path) const;
    virtual TResult BOSS_CALL_TYPE GetModuleName(IVariant **path) const;

    void SetModuleId(const std::string &moduleId);
    void AddModuleCoClassesId(const std::string &coClassId);
    void SetModulePath(const std::string &path);
    void SetModuleName(const std::string &name);

  private:
    mutable RefObjPtr<IVariant> ModuleId;
    mutable RefObjPtr<IEnumImpl> CoClassIds;
    mutable RefObjPtr<IVariant> ModulePath;
    mutable RefObjPtr<IVariant> ModuleName;
  };

}

#endif  // !__ISERVICE_MODULE_INFO_IMPL_H__
